package cn.itsource.basic.util;

import cn.hutool.core.io.file.FileNameUtil;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

@RestController //@Contorller和@ResponseBody（所有的方法都返回json格式）
@RequestMapping("/file") //公共路径
public class FileController {
@PostMapping("/ossUpload")
    public AjaxResult ossUpload(@RequestParam("file")MultipartFile file){

    // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
    String endpoint = "oss-cn-hangzhou.aliyuncs.com";
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    String accessKeyId = "LTAI5tGxtEiCTfG2pigC6AEy";
    String accessKeySecret = "QY6zTGPYaPziuQAUs9RjQLcrL6Yawf";
    // 填写Bucket名称，例如examplebucket。
    String bucketName = "yechenglu";
    // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
    // 填写本地文件的完整路径，例如e//a//1.png
    // 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。

    /**
     * 1.文件名不能重复    随机数：时间戳，uuid
     * 2.文件后缀名和原始类型一致   获取到真实的后缀
     * 文件名 = 随机数 + “.” + suffix
     */
    String originalFilename = file.getOriginalFilename();//1.png
    String suffix = FileNameUtil.getSuffix(originalFilename);//png
    String fileName = System.currentTimeMillis() + "." + suffix;


    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    try {
        InputStream inputStream = file.getInputStream();
        // 创建PutObject请求。
        ossClient.putObject(bucketName, fileName, inputStream);
    } catch (OSSException oe) {
        System.out.println("Caught an OSSException, which means your request made it to OSS, "
                + "but was rejected with an error response for some reason.");
        System.out.println("Error Message:" + oe.getErrorMessage());
        System.out.println("Error Code:" + oe.getErrorCode());
        System.out.println("Request ID:" + oe.getRequestId());
        System.out.println("Host ID:" + oe.getHostId());
    } catch (ClientException ce) {
        System.out.println("Caught an ClientException, which means the client encountered "
                + "a serious internal problem while trying to communicate with OSS, "
                + "such as not being able to access the network.");
        System.out.println("Error Message:" + ce.getMessage());
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }
    //https://java0605.oss-cn-hangzhou.aliyuncs.com/1662434057750.jpg
    //拼接图片的oss里面对应的url
    String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
    return AjaxResult.createSuccess(url);

}


}
